Proyecto Final

Introducción

El objetivo de este proyecto es hacer un pronóstico del Producto Interno de Bruto de México.

Datos

Datos históricos de 1993 hasta la mitad de 2021, en trimestres

Se tiene que predecir el valor de “gdp” para los siguientes 6 trimestres.

Carga de datos

Investigación

Relación de las variables con el PIB.

  • Consumo
  • Gasto de consumo final
  • Importaciones
  • Exportaciones
  • Desempleo
  • Tipo de cambio
  • Incertidumbre

Gráfico de dispersión

Gráficos de tiempo

Gráficos de estacionalidad

Descomposición

Análisis de autocorrelación

Análisis de correlación

Transformaciones

Outliers

Podemos ver un claro outlier en el segundo y trecer trimestre de 2020, esto ocasionado claramente por la pandemia.

Entrenamiento

Tomamos los datos a partir de 2000:

Modelos benchmark

Usamos SNAIVE y drift

fit1 <- model(train,
             snaive = SNAIVE(log(gdp)),
             drift = RW(log(gdp) ~ drift())
             )

Modelos ETS

Utilizamos un ETS automático. Usaremos estacionalidad multiplicativa, una con tendencía aditiva (Holt Winters) y otra amortiguada (Holt Winters Damped).

fit2 <- model(train, 
              hw = ETS(gdp ~ error("M") + trend("A") + season("M")),
              hwa = ETS(gdp ~ error("M") + trend("Ad") + season("M")), 
              auto = ETS(gdp))

Modelos ARIMA

Modelos ARIMA

fit3 <- model(train, 
              arima = ARIMA(gdp ~ pdq(2,1,0) + PDQ(0,0,0)),
              arima_auto = ARIMA(gdp ~ PDQ(0,0,0)),
              )

Modelos SARIMA

Modelos SARIMA

fit4 <- model(train, 
              sarima = ARIMA(gdp ~ pdq(0,0,2) + PDQ(0,1,1)),
              sarima2 = ARIMA(gdp ~ pdq(1,0,0) + PDQ(1,1,0)),
              sarima3 = ARIMA(gdp ~ pdq(1,0,2) + PDQ(1,1,1)),
              sarima4 = ARIMA(gdp ~ pdq(1,1,2) + PDQ(1,1,1)),
              sarima_auto = ARIMA(gdp)
              )
report(fit4)

Modelos de regresión lineal

Haremos un Forwards Stepwise regression:

model(train, 
      o = TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment),
      i = TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty)
      ) %>% glance() %>% 
  select(.model, AICc, BIC) %>% arrange(AICc)

Modelos de regresión lineal

Como podemos ver, el mejor modelo incluye todas las predictoras.

fit5 <- model(train, 
      regresion = TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty))

Modelos de regresión dinamica

fit6 <- model(train, 
              dinamica = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty),
              dinamica2 = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty + pdq(1,0,2) + PDQ(1,1,1)),
              dinamica3 = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty + pdq(1,1,2) + PDQ(1,1,1)))

Modelos de regresión lineal más dummies

fit7 <- model(train2, 
              dummy1= TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty + q2_20 + q3_20),
              dummy2= TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty + season() + trend() + q2_20 + q3_20))

Modelos de regresión armónica

fit8 <- train %>%
  model(
    k1 = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty+ fourier(K = 1) + pdq(1,0,2) + PDQ(0,0,0))
  )

Modelos de regresión armónica con dummies

fit9 <- train2 %>% 
  model(
    k2 = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty+ fourier(K = 1) + pdq(1,1,2) + PDQ(0,0,0)  + q2_20 + q3_20),
    k3 = TSLM(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty+ fourier(K = 1) + q2_20 + q3_20)
  )

Gráfico de pronósticos

Errores de pronósticos

Selección de mejor modelo

Los mejores modelos son:

  • Regresión lineal multiple.
  • Regresión dinamica con valores definidos.
  • Regresión lineal con dummies, estacionales y de tendencia.
  • Regresión armónica, k = 1, valores ARIMA definidos.
  • Regresión armónica, k = 1, valores ARIMA definidos, dummies.

Selección de mejor modelo

Sin embargo, viendo los gráficos, vemos que los mejores dos modelos visualmente son:

  • Regresión lineal multiple. Error MAPE: 0.64
  • Regresión armónica, k = 1, valores ARIMA definidos. Error MAPE: 0.55

Selección de mejor modelo

Tomando en cuenta el error, el mejor modelo fue:

  • Regresión armónica, k = 1, valores ARIMA definidos.
equipo_5 <- model(train, 
      equipo_5 = ARIMA(gdp ~ imports + gov_exp + consumption + usd + exports + unemployment + uncertainty+ fourier(K = 1) + pdq(1,0,2) + PDQ(0,0,0))
      )

Mejor pronóstico